<?php

namespace App\Exceptions\Api\V1;

use Exception;

class ApiException extends Exception
{
    public $errorCode;
    public $errorMsg;
    public $errorHeaders;

    /**
     * 说明：
     * NOT_EXIST:不存在01
     * EXIST:存在02
     * FAULT:失败03
     * FORBID:禁止04
     * UNKNOWN:未知05
     * INVALID:非法/无效06
     * ERROR:错误07
     */

    //模型_控制器_行为_结果；|01：两位数标识模型；01：两位数标识控制器；1：一位数标识行为（一般是CURD）；1：一位数标识结果（成功失败等）。共六位数即可满足
    const ADMIN_AUTH_LOGIN_FAULT = 010101;

    const FAULT_ADMIN_ROLES_STORE   = 80101; // 新增角色失败
    const FAULT_ADMIN_ROLES_UPDATE  = 80102; // 更新角色失败
    const FORBID_ADMIN_ROLES_UPDATE = 80103; // 禁止对超级管理员角色操作
    const FAULT_ADMIN_ROLES_DELETE  = 80104; // 删除角色失败
    const EXISTS_ADMIN_ROLES_SUB    = 80105; // 存在子角色，无法删除
    const FAULT_ADMIN_MENUS_STORE   = 80106; // 新增菜单失败
    const FAULT_ADMIN_MENUS_UPDATE  = 80107; // 更新菜单失败
    const EXISTS_ADMIN_MENUS_SUB    = 80108; // 存在子菜单，无法删除
    const FAULT_ADMIN_USERS_STORE   = 80109; // 新增用户失败
    const FAULT_ADMIN_USERS_UPDATE  = 80110; // 编辑用户失败
    const FORBID_ADMIN_USERS_UPDATE = 80111; // 禁止对超级管理员用户操作

    /**
     * GeneralException constructor.
     *
     * @param int $errorCode
     * @param null $errorMsg
     * @param Exception|null $previous
     * @param array $headers
     */
    public function __construct($errorCode = 0, $errorMsg = null, \Exception $previous = null, array $headers = array())//, $code = 0
    {
        $this->errorCode = $errorCode;
        $this->errorMsg = $errorMsg ? : trans('exception\v1\admin.' . $errorCode);
        $this->errorHeaders = $headers;

        parent::__construct($this->errorMsg, $this->errorCode, $previous);
    }
}
